@echo off
chcp 65001 > nul
setlocal EnableDelayedExpansion

rem etcd 环境启动中
echo ======================================================================
echo etcd 服务启动中...
start "" /B  C:\Users\HaoDaYiZhi\Downloads\etcd-v3.5.13-windows-amd64\etcd.exe 
echo etcd 服务启动完成!!
echo ======================================================================
echo 运行 rpc 目录下每个子目录的 服务：

rem 获取 rpc 目录的父目录路径
for %%A in (app\..) do set "parent_dir=%%~fA"

rem 运行 rpc 目录下每个子目录的 Go 主文件
for /d %%i in (app\*) do (
    rem 检查子目录的名称是否为 "model"，如果是，则跳过
    if /i "%%~nxi" neq "model" (
        rem 设置标志以检查是否找到主文件
        set "found=0"
        echo 运行目录12 %%~nxi

        @REM 获取目录下的子目录是否存在api目录以及rpc目录
        if exist "%%~dpni\api" (
            echo 运行目录123 %%~nxi
            for %%j in ("%%~dpni\api\*.go") do (
                rem 排除不是测试文件的 go 文件
                if not "%%~nj" == "test" (
                    rem 检查是否存在 etc 目录
                    if exist "%%~dpj\etc" (
                        rem 遍历 etc 目录下的 yaml 文件
                        for %%f in ("%%~dpj\etc\*.yaml") do (
                            echo 运行文件 "%%~dpnxj"，使用配置文件 "%%~f"
                            echo %%~dpj 服务启动中...
                            start "" /B go run "%%~dpnxj" -f "%%~f"
                            echo %%~dpj 服务启动完成!!
                        )
                    ) else (
                        echo 运行文件 "%%~dpnxj"
                        start "" /B go run "%%~dpnxj"
                    )
                    rem 找到一个主文件后，设置标志
                    set "found=1"
                )
            )
        )
        if exist "%%~dpni\rpc" (
            echo 运行目录123 %%~nxi
            for %%j in ("%%~dpni\rpc\*.go") do (
                rem 排除不是测试文件的 go 文件
                if not "%%~nj" == "test" (
                    rem 检查是否存在 etc 目录
                    if exist "%%~dpj\etc" (
                        rem 遍历 etc 目录下的 yaml 文件
                        for %%f in ("%%~dpj\etc\*.yaml") do (
                            echo 运行文件 "%%~dpnxj"，使用配置文件 "%%~f"
                            echo %%~dpj 服务启动中...
                            start "" /B go run "%%~dpnxj" -f "%%~f"
                            echo %%~dpj 服务启动完成!!
                        )
                    ) else (
                        echo 运行文件 "%%~dpnxj"
                        start "" /B go run "%%~dpnxj"
                    )
                    rem 找到一个主文件后，设置标志
                    set "found=1"
                )
            )
        )
        rem 检查子目录中是否存在 Go 主文件
        for %%j in ("%%i\*.go") do (
            rem 排除不是测试文件的 go 文件
            if not "%%~nj" == "test" (
                rem 检查是否存在 etc 目录
                if exist "%%~dpj\etc" (
                    rem 遍历 etc 目录下的 yaml 文件
                    for %%f in ("%%~dpj\etc\*.yaml") do (
                        echo 运行文件 "%%~dpnxj"，使用配置文件 "%%~f"
                        echo %%~dpj 服务启动中...
                        start "" /B go run "%%~dpnxj" -f "%%~f"
                        echo %%~dpj 服务启动完成!!
                    )
                ) else (
                    echo 运行文件 "%%~dpnxj"
                    start "" /B go run "%%~dpnxj"
                )
                rem 找到一个主文件后，设置标志
                set "found=1"
            )
        )
        rem 如果未找到主文件，则显示错误信息
        if !found! equ 0 (
            echo [警告] 在目录 %%i 中未找到 Go 主文件。
        )
    )
)

rem 在 api 目录下运行 .go 文件
echo.
echo 运行主进程：
for %%k in ("%parent_dir%\api\*.go") do (
    echo 运行文件 "%%~dpnxk"
    rem 检查是否存在对应的配置文件
    set "config_file=%parent_dir%\api\etc\%%~nk.yaml"
    echo 配置文件 "!config_file!"
    if exist "!config_file!" (
        echo 使用配置文件 "!config_file!"
        echo %%~dpnxk 服务启动中...
        start "" /B go run "%%~dpnxk" -f "!config_file!"
        echo %%~dpnxk 主服务启动完成!!
    ) else (
        echo 没有找到与文件 "%%~nxk" 对应的配置文件。
        start "" /B go run "%%~dpnxk"
    )
)

endlocal
